/*
描述
给定 n 个字符串，请对 n 个字符串按照字典序排列。

数据范围： 1 <= n <= 1000  ，字符串长度满足 1 <= len <= 100 
输入描述：
输入第一行为一个正整数n(1 <= n <= 1000),下面n行为n个字符串(字符串长度 <= 100),字符串中只含有大小写字母。
输出描述：
数据输出n行，输出结果为按照字典序排列的字符串。

输入：
9
cap
to
cat
card
two
too
up
boat
boot
复制
输出：
boat
boot
cap
card
cat
to
too
two
up
*/

#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);

    /* 不初始化n就可以使用变量作为数组的参数，但一般不允许这样用，需要给出明确的数值，而不是变量n */
    char strings[n][101]; /* n 改为数字 1000，一般不允许用变量*/
    for (int i = 0; i < n; i++) {
        scanf("%s", strings[i]);
    }

    char temp[101] = {0};
    /* 共执行i * j次，对于每个i都要执行j次，这种方式，第一轮i=0跑完的时候，第一个值一定是最小的，第二轮第二个值一定是第二小的 */
    for(int i = 0; i < n-1; i++) {
        for(int j = i+1; j < n; j++) {
            if (strcmp(strings[i], strings[j]) > 0) {
                // memcpy()接口只能处理字符数组，不能处理char*格式的数据
                memcpy(temp, strings[i], 101);
                memcpy(strings[i], strings[j], 101);
                memcpy(strings[j], temp, 101);
            }
        }
    }

    for (int i = 0; i < n; i++) {
        printf("%s\n", strings[i]);
    }

    return 0;
}

